下载量超1600万的热门开源 JavaScript 序列化包中被曝 RCE 漏洞
Serialize-javascript由雅虎开发并维护,是一款颇受欢迎的开源项目,用于将 JavaScript 序列化为 JSON 的超集,包括表达式、日期和函数。
5月20 日,Jordan Milne 和 Ryan Siebert 将该漏洞告知 GitHub,后者于上周通过 GitHub Advisory 数据库公布。该漏洞的编号是 CVE-2020-7660,可导致远程攻击者通过 deleteFunctions 函数将任意代码注入 index.js 中。
Serialize-javascript低于3.1.0的版本受影响。
PoC
Serialize-javascript是一款热门库,其下载量超过1600万次,有840个相关项目。
GitHub 在安全公告中指出,这个不安全的序列化问题将导致对象如 {"foo": /1"/, "bar":"a\"@__R-<UID>-0__@"} 序列化为 {"foo": /1"/, "bar":"a\/1"/},因此用户输入能够规避 bar 的键值。
因此,如果攻击者额能够控制“foo”和“bar”的值并猜测出 UID,那么就有可能执行 RCE。安全公告指出,该 UID 的密钥空间为40亿,因此利用是一个“现实的网络攻击”。
当 `serialize()`d版本是 `eval()`d时,如下 PoC 能够调用 console.log():
eval('('+ serialize({"foo": /1" + console.log(1)/i, "bar": '"@__R-<UID>-0__@'}) + ')');
该漏洞已在serialize-javascript 版本3.1.0 中修复,贡献人员已通过修改代码确保占位符前面没有反斜杠的方式修复该漏洞。
影响范围广
CVE-2020-7660 的CVSS 评分为8.1,“重要”范围内靠近“严重”的级别。
然而,Red Hat 在关于该漏洞的安全公告中指出,已将该漏洞的严重等级调整为“中危”,因为利用serialize-javascript 的应用程序必须能够控制通过它传递的 JSON 数据才能触发该漏洞。
Red Hat 指出,虽然Container NativeVirtualization 2 的受支持版本不受影响,但遗留版本包括2.0在内均受影响。
OpenShift ServiceMesh 1.0/1.1 (servicemesh-grafana) 的修复方案已发布,目前正在为 Red Hat OpenShiftContainer Platform 4 (openshift4/ose-prometheus) 准备补丁。
鉴于该数据包很热门,其它仓库也受影响,包括 Ruby on Rails 的Webpacker。
上周日,使用易受攻击的serialize-javascript 的稳定版本已修复。
目前,研究员 Milne 和 Siebert 尚未置评。
开源自动化服务器软件 Jenkins 被曝严重漏洞,可泄露敏感信息
开源框架 Apache Struts 2漏洞的 PoC 已公开
https://portswigger.net/daily-swig/remote-code-execution-vulnerability-exposed-in-popular-javascript-serialization-package
题图:Pixabay License
本文由奇安信代码卫士编译,不代表奇安信观点。转载请注明“转自奇安信代码卫士 www.codesafe.cn”。
奇安信代码卫士 (codesafe)
国内首个专注于软件开发安全的
产品线。